package com.hhxy.web;

import com.alibaba.fastjson.JSON;
import com.hhxy.pojo.Brand;
import com.hhxy.pojo.PageBean;
import com.hhxy.service.BrandService;
import com.hhxy.service.BrandServiceImp;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.List;

@WebServlet("/brand/*")
public class BrandServlet extends BaseServlet {
    //1、获取service对象
    /*  又是一个小细节（这个地方已经有两个细节了）
        细节1：提升作用域，让service对象公用，减少代码重复
        细节2：多态写法获取service对象，让表现层和业务逻辑层进一步解耦
    */
    BrandService service = new BrandServiceImp();

    /**
     * 查询所有的Servlet方法
     */
    public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //2、调用service对象的方法，获取数据
        List<Brand> brands = service.selectAll();
        //3、将获取到的对象数据转换成JSON数据（序列化）
        String jsonString = JSON.toJSONString(brands);
        //4、将JSON数据响应到前端html页面
        //4.1 设置数据响应格式，防止乱码
        response.setContentType("text/json;charset=utf-8");
        //4.2 使用Response的打印流对象进行响应
        response.getWriter().write(jsonString);
    }

    /**
     * 添加数据的Servlet方法
     */
    public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //2、获取来自add.html的数据（注意这是Post请求的处理方式，暂时还不知道Get发送JSON如何接收）
        BufferedReader br = request.getReader();
        String params = br.readLine();
        //3、将获取到的JSON数据转换成对象数据（反序列化）
        Brand brand = JSON.parseObject(params, Brand.class);
        response.getWriter().write("0");
        //4、调用service对象的方法，完成数据添加
        int flag = service.add(brand);
        /*System.out.println("返回值："+flag);*/
        //5、发送一个响应成功的标识
        response.getWriter().write(flag + "");//切记一定要传字符串，不然会乱码
    }

    /**
     * 批量删除数据的servlet方法
     */
    public void deleteByIds(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //2、获取来自前端的JSON数据
        BufferedReader br = request.getReader();
        String params = br.readLine();
        System.out.println(params);
        //3、将获取到的数据转成对象数据（反序列化）
        int[] ids = JSON.parseObject(params, int[].class);
        //4、调用service对象中的方法，完成批量删除
        service.deleteByIds(ids);
        //5、发送一个响应成功的标识给前端
        response.getWriter().write("success");
    }

    /**
     * 分页查询的servlet方法
     */
    public void selectByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //2、接收请求参数（Post请求）
        //currentPage和pageSize是使用？（请求行）进行传递的
        String _currentPage = request.getParameter("currentPage");//临时变量前用_标记
        String _pageSize = request.getParameter("pageSize");
        //将字符串数据解析成int类型
        int currentPage = Integer.parseInt(_currentPage);
        int pageSize = Integer.parseInt(_pageSize);

        //3、调用service对象的方法，获取分页查询的数据
        PageBean<Brand> pageBean = service.selectByPage(currentPage, pageSize);

        //4、将获取的对象数据转成JSON数据（序列化）
        String jsonString = JSON.toJSONString(pageBean);
        //5、将JSON数据响应到前端页面
        //5.1 设置编码格式
        response.setContentType("text/json;charset=utf-8");
        //5.2 传数据
        response.getWriter().write(jsonString);
    }
    /**
     * 分页条件查询
     */
    public void selectByPageAndCondition(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //2、接收请求参数（Post请求）
//        request.setCharacterEncoding("utf-8");(JSON 数据不需要设置编码)
        //currentPage和pageSize是使用？（请求行）进行传递的
        String _currentPage = request.getParameter("currentPage");//临时变量前用_标记
        String _pageSize = request.getParameter("pageSize");
        // brand的条件是使用data{}(请求体)进行传递的
        BufferedReader br = request.getReader();
        String params = br.readLine();

        //3、对请求参数进行转换
        //将字符串数据解析成int类型
        int currentPage = Integer.parseInt(_currentPage);
        int pageSize = Integer.parseInt(_pageSize);
        //将JSON数据转成对象数据（反序列化）
        Brand brand = JSON.parseObject(params, Brand.class);

        //4、调用service对象的方法，获取分页条件查询的数据
        PageBean<Brand> pageBean = service.selectByPageAndCondition(currentPage, pageSize,brand);

        //5、将获取的对象数据转成JSON数据（序列化）
        String jsonString = JSON.toJSONString(pageBean);

        //6、将JSON数据响应到前端页面
        //6.1 设置编码格式
        response.setContentType("text/json;charset=utf-8");
        //6.2 传数据
        response.getWriter().write(jsonString);
    }
}
